package com.it.data_tree.tree.binarySearchTree;

/**
 * @Author: Coke
 * @DateTime: 2023/04/17/21:52
 * @注释: 二叉搜索树 树节点类  泛型
 **/
public class BSTTree2<K extends Comparable<K>, V> {
    
    public BSTNode2<K, V> root;
    
    /**
     * @param key: 查找的关键字
     * @return V  关键字对应的值
     * @作者: Coke
     * @注释: 查找关键字对应的值  -- 泛型
     * @DateTime: 2023/4/17 23:02
     */
    public V get (K key) {
        return doget(root, key);
    }
    
    /**
     * @param root: 查找的树
     * @param key:  查找的关键字
     * @return V  关键字对应的值
     * @作者: Coke
     * @注释: 查找关键字 - 实现逻辑 -- 泛型
     * @DateTime: 2023/4/17 23:03
     */
    public V doget (BSTNode2<K, V> root, K key) {
        if (root == null) {
            return null;
        }
        if (key != null) {
            int num = key.compareTo(root.key);
            /*
             * num = -1  key < node.key
             * num = 1  key > node.key
             * num = 0  key = node.key
             * */
            // 向左子节点查询
            if (num < 0) {
                return doget(root.left, root.left.key);
                // 向右子节点查询
            } else if (num > 0) {
                return doget(root.right, root.right.key);
                // 相等 返回值
            } else {
                return root.value;
            }
        }
        return null;
    }
    
    
}
